(0) Obligation:

The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

*(@x, @y) → #mult(@x, @y)
dyade(@l1, @l2) → dyade#1(@l1, @l2)
dyade#1(::(@x, @xs), @l2) → ::(mult(@x, @l2), dyade(@xs, @l2))
dyade#1(nil, @l2) → nil
mult(@n, @l) → mult#1(@l, @n)
mult#1(::(@x, @xs), @n) → ::(*(@n, @x), mult(@n, @xs))
mult#1(nil, @n) → nil

The (relative) TRS S consists of the following rules:

#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))

Rewrite Strategy: INNERMOST

(1) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID) transformation)

Transformed relative TRS to weighted TRS

(2) Obligation:

The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

*(@x, @y) → #mult(@x, @y) [1]
dyade(@l1, @l2) → dyade#1(@l1, @l2) [1]
dyade#1(::(@x, @xs), @l2) → ::(mult(@x, @l2), dyade(@xs, @l2)) [1]
dyade#1(nil, @l2) → nil [1]
mult(@n, @l) → mult#1(@l, @n) [1]
mult#1(::(@x, @xs), @n) → ::(*(@n, @x), mult(@n, @xs)) [1]
mult#1(nil, @n) → nil [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]

Rewrite Strategy: INNERMOST

(3) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID) transformation)

Renamed defined symbols to avoid conflicts with arithmetic symbols:

* => times

(4) Obligation:

The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

times(@x, @y) → #mult(@x, @y) [1]
dyade(@l1, @l2) → dyade#1(@l1, @l2) [1]
dyade#1(::(@x, @xs), @l2) → ::(mult(@x, @l2), dyade(@xs, @l2)) [1]
dyade#1(nil, @l2) → nil [1]
mult(@n, @l) → mult#1(@l, @n) [1]
mult#1(::(@x, @xs), @n) → ::(times(@n, @x), mult(@n, @xs)) [1]
mult#1(nil, @n) → nil [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]

Rewrite Strategy: INNERMOST

(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)

Infered types.

(6) Obligation:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

times(@x, @y) → #mult(@x, @y) [1]
dyade(@l1, @l2) → dyade#1(@l1, @l2) [1]
dyade#1(::(@x, @xs), @l2) → ::(mult(@x, @l2), dyade(@xs, @l2)) [1]
dyade#1(nil, @l2) → nil [1]
mult(@n, @l) → mult#1(@l, @n) [1]
mult#1(::(@x, @xs), @n) → ::(times(@n, @x), mult(@n, @xs)) [1]
mult#1(nil, @n) → nil [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]

The TRS has the following type information:
times :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#mult :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
dyade :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
dyade#1 :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
:: :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
mult :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
nil :: :::nil:#0:#s:#neg:#pos
mult#1 :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#add :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#0 :: :::nil:#0:#s:#neg:#pos
#neg :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#s :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#pred :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#pos :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#succ :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos
#natmult :: :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos → :::nil:#0:#s:#neg:#pos

Rewrite Strategy: INNERMOST

(7) CompletionProof (UPPER BOUND(ID) transformation)

The transformation into a RNTS is sound, since:

(a) The obligation is a constructor system where every type has a constant constructor,

(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:


times
dyade
dyade#1
mult
mult#1

(c) The following functions are completely defined:

#add
#mult
#natmult
#pred
#succ

Due to the following rules being added:

#add(v0, v1) → null_#add [0]
#mult(v0, v1) → null_#mult [0]
#natmult(v0, v1) → null_#natmult [0]
#pred(v0) → null_#pred [0]
#succ(v0) → null_#succ [0]

And the following fresh constants:

null_#add, null_#mult, null_#natmult, null_#pred, null_#succ

(8) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

times(@x, @y) → #mult(@x, @y) [1]
dyade(@l1, @l2) → dyade#1(@l1, @l2) [1]
dyade#1(::(@x, @xs), @l2) → ::(mult(@x, @l2), dyade(@xs, @l2)) [1]
dyade#1(nil, @l2) → nil [1]
mult(@n, @l) → mult#1(@l, @n) [1]
mult#1(::(@x, @xs), @n) → ::(times(@n, @x), mult(@n, @xs)) [1]
mult#1(nil, @n) → nil [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]
#add(v0, v1) → null_#add [0]
#mult(v0, v1) → null_#mult [0]
#natmult(v0, v1) → null_#natmult [0]
#pred(v0) → null_#pred [0]
#succ(v0) → null_#succ [0]

The TRS has the following type information:
times :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
dyade :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
dyade#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
:: :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
nil :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
mult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#0 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#neg :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#s :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#pos :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ

Rewrite Strategy: INNERMOST

(9) NarrowingProof (BOTH BOUNDS(ID, ID) transformation)

Narrowed the inner basic terms of all right-hand sides by a single narrowing step.

(10) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

times(@x, @y) → #mult(@x, @y) [1]
dyade(@l1, @l2) → dyade#1(@l1, @l2) [1]
dyade#1(::(@x, @xs), @l2) → ::(mult(@x, @l2), dyade(@xs, @l2)) [1]
dyade#1(nil, @l2) → nil [1]
mult(@n, @l) → mult#1(@l, @n) [1]
mult#1(::(@x, @xs), @n) → ::(times(@n, @x), mult(@n, @xs)) [1]
mult#1(nil, @n) → nil [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(#0))), @y) → #pred(#succ(@y)) [0]
#add(#neg(#s(#s(#s(@x')))), @y) → #pred(#succ(#add(#pos(#s(@x')), @y))) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(null_#add) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(#0))), @y) → #succ(#succ(@y)) [0]
#add(#pos(#s(#s(#s(@x'')))), @y) → #succ(#succ(#add(#pos(#s(@x'')), @y))) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(null_#add) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(#0), @y) → #add(#pos(@y), #0) [0]
#natmult(#s(#s(@x1)), @y) → #add(#pos(@y), #add(#pos(@y), #natmult(@x1, @y))) [0]
#natmult(#s(@x), @y) → #add(#pos(@y), null_#natmult) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]
#add(v0, v1) → null_#add [0]
#mult(v0, v1) → null_#mult [0]
#natmult(v0, v1) → null_#natmult [0]
#pred(v0) → null_#pred [0]
#succ(v0) → null_#succ [0]

The TRS has the following type information:
times :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
dyade :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
dyade#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
:: :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
nil :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
mult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#0 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#neg :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#s :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#pos :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ → :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ
null_#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ

Rewrite Strategy: INNERMOST

(11) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID) transformation)

Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction.
The constant constructors are abstracted as follows:

nil => 1
#0 => 0
null_#add => 0
null_#mult => 0
null_#natmult => 0
null_#pred => 0
null_#succ => 0

(12) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ @y :|: z' = @y, z = 0, @y >= 0
#add(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#add(z, z') -{ 0 }→ #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0
#add(z, z') -{ 0 }→ #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0
#add(z, z') -{ 0 }→ #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0
#add(z, z') -{ 0 }→ #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0
#add(z, z') -{ 0 }→ #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 1 + @y, @y >= 0
#mult(z, z') -{ 0 }→ 0 :|: @x >= 0, z = 1 + @x, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#mult(z, z') -{ 0 }→ 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z' = @y, z = 0, @y >= 0
#natmult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#pred(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#succ(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
dyade(z, z') -{ 1 }→ dyade#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1
dyade#1(z, z') -{ 1 }→ 1 :|: z' = @l2, z = 1, @l2 >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, @l2) + dyade(@xs, @l2) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(@l, @n) :|: @l >= 0, @n >= 0, z' = @l, z = @n
mult#1(z, z') -{ 1 }→ 1 :|: z' = @n, z = 1, @n >= 0
mult#1(z, z') -{ 1 }→ 1 + times(@n, @x) + mult(@n, @xs) :|: z' = @n, @x >= 0, z = 1 + @x + @xs, @n >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0

(13) InliningProof (UPPER BOUND(ID) transformation)

Inlined the following terminating rules on right-hand sides where appropriate:

#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#pred(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#succ(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#succ(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0

(14) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ @y :|: z' = @y, z = 0, @y >= 0
#add(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0
#add(z, z') -{ 0 }→ 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), 1 + (1 + @x) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), v0 >= 0, 1 + (1 + @x) = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), v0 >= 0, 1 + (1 + (1 + @x)) = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0
#add(z, z') -{ 0 }→ #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x))
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x)
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 1 + @y, @y >= 0
#mult(z, z') -{ 0 }→ 0 :|: @x >= 0, z = 1 + @x, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#mult(z, z') -{ 0 }→ 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z' = @y, z = 0, @y >= 0
#natmult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#pred(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#succ(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
dyade(z, z') -{ 1 }→ dyade#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1
dyade#1(z, z') -{ 1 }→ 1 :|: z' = @l2, z = 1, @l2 >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, @l2) + dyade(@xs, @l2) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(@l, @n) :|: @l >= 0, @n >= 0, z' = @l, z = @n
mult#1(z, z') -{ 1 }→ 1 :|: z' = @n, z = 1, @n >= 0
mult#1(z, z') -{ 1 }→ 1 + times(@n, @x) + mult(@n, @xs) :|: z' = @n, @x >= 0, z = 1 + @x + @xs, @n >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0

(15) SimplificationProof (BOTH BOUNDS(ID, ID) transformation)

Simplified the RNTS by moving equalities from the constraints into the right-hand sides.

(16) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

(17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID) transformation)

Found the following analysis order by SCC decomposition:

{ #pred }
{ #succ }
{ #add }
{ #natmult }
{ #mult }
{ times }
{ mult#1, mult }
{ dyade, dyade#1 }

(18) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#pred}, {#succ}, {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}

(19) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #pred
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + z

(20) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#pred}, {#succ}, {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: ?, size: O(n1) [2 + z]

(21) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #pred
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(22) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]

(23) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(24) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]

(25) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #succ
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + z

(26) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: ?, size: O(n1) [2 + z]

(27) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #succ
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(28) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]

(29) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(30) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]

(31) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: #add
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2·z + z'

(32) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#add}, {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: ?, size: O(n1) [2·z + z']

(33) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #add
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(34) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']

(35) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(36) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']

(37) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using PUBS for: #natmult
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 2 + 4·z + 4·z·z' + 2·z'

(38) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natmult}, {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: ?, size: O(n2) [2 + 4·z + 4·z·z' + 2·z']

(39) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #natmult
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(40) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']

(41) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(42) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']

(43) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: #mult
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 1 + 4·z·z' + 2·z'

(44) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#mult}, {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: ?, size: O(n2) [1 + 4·z·z' + 2·z']

(45) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #mult
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(46) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']

(47) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(48) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']

(49) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: times
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 1 + 4·z·z' + 2·z'

(50) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {times}, {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: ?, size: O(n2) [1 + 4·z·z' + 2·z']

(51) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: times
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(52) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 1 }→ 1 + times(z', @x) + mult(z', @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']

(53) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(54) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 2 }→ 1 + s16 + mult(z', @xs) :|: s16 >= 0, s16 <= 4 * (@x * z') + 2 * @x + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']

(55) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: mult#1
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

Computed SIZE bound using CoFloCo for: mult
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(56) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 2 }→ 1 + s16 + mult(z', @xs) :|: s16 >= 0, s16 <= 4 * (@x * z') + 2 * @x + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#1,mult}, {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
mult#1: runtime: ?, size: INF
mult: runtime: ?, size: INF

(57) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: mult#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 5 + 3·z

Computed RUNTIME bound using CoFloCo for: mult
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 6 + 3·z'

(58) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 + mult(@x, z') + dyade(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 1 }→ mult#1(z', z) :|: z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 2 }→ 1 + s16 + mult(z', @xs) :|: s16 >= 0, s16 <= 4 * (@x * z') + 2 * @x + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
mult#1: runtime: O(n1) [5 + 3·z], size: INF
mult: runtime: O(n1) [6 + 3·z'], size: INF

(59) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(60) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 7 + 3·z' }→ 1 + s17 + dyade(@xs, z') :|: s17 >= 0, s17 <= inf, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 6 + 3·z' }→ s18 :|: s18 >= 0, s18 <= inf', z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 8 + 3·@xs }→ 1 + s16 + s19 :|: s19 >= 0, s19 <= inf'', s16 >= 0, s16 <= 4 * (@x * z') + 2 * @x + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
mult#1: runtime: O(n1) [5 + 3·z], size: INF
mult: runtime: O(n1) [6 + 3·z'], size: INF

(61) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: dyade
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

Computed SIZE bound using CoFloCo for: dyade#1
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(62) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 7 + 3·z' }→ 1 + s17 + dyade(@xs, z') :|: s17 >= 0, s17 <= inf, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 6 + 3·z' }→ s18 :|: s18 >= 0, s18 <= inf', z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 8 + 3·@xs }→ 1 + s16 + s19 :|: s19 >= 0, s19 <= inf'', s16 >= 0, s16 <= 4 * (@x * z') + 2 * @x + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {dyade,dyade#1}
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
mult#1: runtime: O(n1) [5 + 3·z], size: INF
mult: runtime: O(n1) [6 + 3·z'], size: INF
dyade: runtime: ?, size: INF
dyade#1: runtime: ?, size: INF

(63) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using PUBS for: dyade
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 2 + 8·z + 3·z·z'

Computed RUNTIME bound using KoAT for: dyade#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 10 + 8·z + 3·z·z' + 3·z'

(64) Obligation:

Complexity RNTS consisting of the following rules:

#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s10 :|: s8 >= 0, s8 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s9 >= 0, s9 <= 1 * s8 + 2, s10 >= 0, s10 <= 1 * s9 + 2, z' >= 0, z - 4 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s7 :|: s5 >= 0, s5 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s6 >= 0, s6 <= 1 * s5 + 2, s7 >= 0, s7 <= 1 * s6 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s11 :|: s11 >= 0, s11 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s14 :|: s12 >= 0, s12 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s13 >= 0, s13 <= 2 * (1 + z') + 1 * s12, s14 >= 0, s14 <= 2 * (1 + z') + 1 * s13, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s3 :|: s3 >= 0, s3 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
dyade(z, z') -{ 1 }→ dyade#1(z, z') :|: z >= 0, z' >= 0
dyade#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
dyade#1(z, z') -{ 7 + 3·z' }→ 1 + s17 + dyade(@xs, z') :|: s17 >= 0, s17 <= inf, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
mult(z, z') -{ 6 + 3·z' }→ s18 :|: s18 >= 0, s18 <= inf', z' >= 0, z >= 0
mult#1(z, z') -{ 1 }→ 1 :|: z = 1, z' >= 0
mult#1(z, z') -{ 8 + 3·@xs }→ 1 + s16 + s19 :|: s19 >= 0, s19 <= inf'', s16 >= 0, s16 <= 4 * (@x * z') + 2 * @x + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
times(z, z') -{ 1 }→ s15 :|: s15 >= 0, s15 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed:
Previous analysis results are:
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
mult#1: runtime: O(n1) [5 + 3·z], size: INF
mult: runtime: O(n1) [6 + 3·z'], size: INF
dyade: runtime: O(n2) [2 + 8·z + 3·z·z'], size: INF
dyade#1: runtime: O(n2) [10 + 8·z + 3·z·z' + 3·z'], size: INF

(65) FinalProof (EQUIVALENT transformation)

Computed overall runtime complexity

(66) BOUNDS(1, n^2)